package br.com.futebol.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.log4j.Logger;

/**
 * Servlet que carrega as configuracoes globais do sistema de um arquivo de propriedades.
 * 
 * @author Thyago Schleuss - tschleuss@gmail.com
 */
public final class SystemConfig {

    private static final Logger LOG = Logger.getLogger(SystemConfig.class);
    private static SystemConfig systemConfig = new SystemConfig();
    private static Properties databaseProperties;
    private static Properties geralProperties;
    private static Properties logProperties;

    /**
     * Construtor privado para instancia o objeto de properties.
     */
    private SystemConfig() {
        databaseProperties = new Properties();
        geralProperties = new Properties();
        logProperties = new Properties();
    }

    /**
     * Retorna uma instancia de {@link SystemConfig}
     * 
     * @return
     */
    public static SystemConfig getInstance() {
        return systemConfig;
    }

    /**
     * Carrega o arquivo de propriedades de banco.
     * 
     * @param in
     */
    public void loadDatabaseProperties(final InputStream in) {
        try {
            databaseProperties.load(in);
        } catch (IOException e) {
            LOG.error("Erro ao carregar o arquivo de propriedades de banco", e);
        }
    }

    /**
     * Carrega o arquivo de propriedades gerais.
     * 
     * @param in
     */
    public void loadGeralProperties(final InputStream in) {
        try {
            geralProperties.load(in);
        } catch (IOException e) {
            LOG.error("Erro ao carregar o arquivo de propriedades geral", e);
        }
    }

    /**
     * Carrega o arquivo de propriedades de log.
     * 
     * @param in
     */
    public void loadLogProperties(final InputStream in) {
        try {
            logProperties.load(in);
        } catch (IOException e) {
            LOG.error("Erro ao carregar o arquivo de propriedades de log", e);
        }
    }

    /**
     * Retorna a instancia carregada do arquivo de Properties de banco.
     */
    public Properties getDatabaseProperties() {
        return databaseProperties;
    }

    /**
     * Retorna a instancia carregada do arquivo de Properties geral.
     */
    public Properties getGeralProperties() {
        return geralProperties;
    }

    /**
     * Retorna a instancia carregada do arquivo de Properties de log.
     * 
     * @return
     */
    public Properties getLogProperties() {
        return logProperties;
    }

    /**
     * Recupera o valor do propertie de acordo com a chave informada.
     * 
     * @param key
     * @return
     */
    public static String getProperty(final String key) {
        return String.valueOf(geralProperties.getProperty(key));
    }
}
